// PROGRAMA : TABPB001(BATCH)
// OPCAO : 'ETC' - CLASSIFICADO PELO CODIGO DO ELEMENTO
// 'ETD' - CLASSIFICADO PELA DESCRICAO DO ELEMENTO
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : GEJUSPC - GERENCIA DA JUSTICA, SEGURANCA PUBLICA E
// CIDADANIA / INSTITUTO DE IDENTIFICACAO
// OBJETIVO : EMITIR TABELA DE MUNICIPIOS DE TODOs O BRASIL
// : EM 28/02/2000
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.Arrays;

import net.sf.jasperreports.engine.JRException;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Tabpb001Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabpb001A;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Tabpb001 OBJETIVO : EMITIR TABELA DE MUNICIPIOS DE TODOs O BRASIL *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/tabpb001")
public class Tabpb001 {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Tabpb001A tabpb001A;
	Tabpb001Report report;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	Sisll001 sisll001 = new Sisll001();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Tabpb001 tabpb001Anterior;
	String faseproc = "0";

	private int cont = 0;
	private String tabdec = "";
	private String cod33 = "";
	private String cod34 = "";
	private String tab1 = "";
	private String[] uf = { "", "AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "FN", "GO", "MA", "MG", "MS", "MT", "PA", "PB", "PE", "PI", "PR", "RJ", "RN", "RO", "RR", "RS", "SC", "SE", "SP", "TO" };
	private int iUf = 0;

	private Tabpb001A preMapas() throws JRException {
		tabpb001A = new Tabpb001A(true, sessao);
		Arrays.fill(uf, "");
		return tabpb001A;
	}

	public Tabpb001(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Tabpb001A tabpb001A) {
		try {
			return main(tabpb001A);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}
	}

	private InputStreamDownload main(Tabpb001A ptabpb001A) throws ParseException, JRException, FileNotFoundException {
		if (ptabpb001A == null) {
			primeiraVez = true;
			// tabpe001B = new Tabpe001B (primeiraVez);
			tabpb001A = preMapas();
			tabpb001A.setNavegar("../tabpb001/executar");
			result.include("tabpb001A", tabpb001A);
			sessao.setAtributo("TABPB001", this);
			tabpb001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(ptabpb001A);
		}

		report = new Tabpb001Report();
		for (iUf = 1; iUf <= 28; iUf++) {

			report.setDataCorrente(UtilBean.inverteDataCorrente());
			sessao.getSisgsisp().setVar(10);
			// DEFINE PRINTER(EFM = 1)
			sessao.getSisgsisp().setOperacao("ETD");
			// OPERACAO:='ETC' ETC => CLASSIFICACAO PELO CODIGO DO ELEMENTO
			report.setCodtab(001);
			// ETD => CLASSIFICACAO PELA DESCRICAO DO ELEMENTO
			sessao.getSisgsisp().setMatric(34165);
			// NUMERO DA TABELA
			sessao.getSisgsisp().setSenha("SJLM99");
			
			funcoes.tabsemi(sessao);
			vwDvetab.consultaCodigoTabela(report.getCodtab());
			if (vwDvetab.totalRegistros() == 0) {
				tabpb001A.enviarMensagem("codtab", "");
				return null;
			}

			tabdec = UtilBean.moveSubstring(tabdec, 0, 3, "N", 001);
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 001);
			tabpb001A.setCod(report.getCodtab());
			vwDvetab.fecha();
			vwDvetab.consultaTabele(001, 0L);
			report.setTabela(vwDvetab.getDescricaoElem());

			if (vwDvetab.registrosProcessados() == 0) {
				report.setTabela(StringUtils.repeat("*", 54));
			}
			if (sessao.getSisgsisp().getOperacao().equals("ETD")) {
				if (report.getCodtab() == 1) {
					janela1();
					if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
						continue;
					}
				}
				if (report.getCodtab() == 1 || report.getCodtab() == 2) {
					cod33 = " ";
				}
				vwDvetab.fecha();
				// 'DESCRICAO DO ELEMENTO'
				while (vwDvetab.leituraTabdecMaiorig(001, "")) {
					if (!uf[iUf].trim().equals("")) {
						if (!(vwDvetab.getChaveAlfaAcesso() == uf[iUf])) {
							continue;
						}
					}
					relatorio();
					if (vwDvetab.quebraDintabcodtab()) {
						sessao.getSisgsisp().setMens("EMISSAO EFETUADA OK");
						break;
					}
				}
				vwDvetab.fecha();
			}
			if (sessao.getSisgsisp().getOperacao().equals("ETC")) {
				vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", report.getCodtab());
				vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", 1);
				if (report.getCodtab() == 1) {
					janela1();
					if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
						continue;
					}
				}
				if (report.getCodtab() == 1 || report.getCodtab() == 2) {
				}
				vwDvetab.fecha();
				while (vwDvetab.leituraTabeleMaiorig(report.getCodtab(), 1L)) {
					if (!uf[iUf].trim().equals("")) {
						if (!(vwDvetab.getChaveAlfaAcesso() == uf[iUf])) {
							continue;
						}
					}
					relatorio();
					if (vwDvetab.quebraDintabcodtab()) {
						sessao.getSisgsisp().setMens("EMISSAO EFETUADA OK");
						break;
					}
				}
				vwDvetab.fecha();

			}
			vwDvetab.pesq = "";
		}

		return report.imprimir();

	}

	private void relatorio() throws JRException, ParseException {
		formataRelatorio();
		cont += 1;
		if (cont > 50) {
			cont = 0;
		}
		// RELATORIO 1 PS=60 LS=133 SG=ON
		report.setPageSize(60);
		report.setLineSize(133);
		// RELATORIO
		report.gravaRelatorio(2);
		// RELATORIO
	}

	private void janela1() throws ParseException {
		tab1 = UtilBean.concatena(report.getTabela(), "-", uf[iUf]);
		// UF(I-UF):=' ' 'SIGLA DA FEDERACAO'

		report.setTabela(tab1);
	}

	private void restaurarEstados(Tabpb001A ptabpb001A) {
		this.tabpb001Anterior = (Tabpb001) sessao.getAtributo("TABPB001");
		if (ptabpb001A != null) {
			tabpb001A = ptabpb001A;
		} else {
			tabpb001A = this.tabpb001Anterior.tabpb001A;
		}
		tabpb001A.setSessao(sessao);
		this.faseproc = this.tabpb001Anterior.faseproc;
	}

	private void formataRelatorio() throws ParseException {
		report.setDiatabChalfa(vwDvetab.getChaveAlfaAcesso());
		report.setDiatabDescel(vwDvetab.getDescricaoElem());
		report.setDiatabGrupel(vwDvetab.getGrupoElem());
		report.setDintabCodele(vwDvetab.getCodigoElem());
		report.setDintabDatapo(vwDvetab.getDataApoio());
		report.setDintabDatatu(vwDvetab.getDataAtualizacao());
		report.setDintabMatfun(vwDvetab.getMatriculaFunc());
	}
}
